from fastapi import FastAPI, Query
import uvicorn
from typing import Union

# 创建一个FastAPI实例
app = FastAPI()

# 请求参数定义与校验
@app.get("/demo")
async def demo(name:str, age: int):
    """
    请求参数定义与校验
    :param name: 查询参数name
    :param age: 查询参数age
    :return:
    """
    return {"name": name, "age": age}

@app.get("/demo/page")
async def demo_page(page: str | None = None, size: Union[int, None] = None):
    """
    给查询参数设置默认值
    :param page: str | None = None
    :param size: Union[int, None]
    :return:
    """
    return {"page": page, "size": size}


@app.get("/demo/page/check")
# 参数指定为Query表示是一个查询参数
async def demo_page_check(token: Union[str, None] = Query(
    default=None,                   # 指定默认值
    min_length=5,                   # 如果提交参数要求参数不能小于5个字符
    max_length=10,                  # 如果提交参数要求参数不能大于10个字符
    title="这是一个token",           # 参数标题
    description="参数描术说明信息",   # 参数描述信息
    deprecated=True,                # 指定参数是否弃用，True表示弃用，默认为False
    alias="tk"                      # 参数别名，如果不设置，则使用参数名，如果设置了别名，那么传参时需要使用这个别名
)):
    return {"token": token}

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)